package com.tedu.api.io;

import org.junit.Test;

import java.io.*;
import java.util.logging.Filter;

/**
 * listFiles(接口：Filter)       重载
 * 作用：按照”指定规则“获取对应文件或者文件夹
 * Filter接口---专门给listFiles方法提供：过滤文件或者文件夹【指定规则】
 * accept()从每个File的文件中判断，拿到【具体逻辑】的文件夹
 *
 * 需求：获取API 项目下 所有子项【文件和文件夹】，获取src文件
 * 制定规则：验证是s开头的就是src
 *
 * 作业2：获取FileFilter接口按照匿名内部类方式实现，功能如上
 */
public class FilterAPI {
    public static void main(String[] args) throws IOException {
        /*//主方法：./ 路径指定根级
        //1.创建File文件类 ： 获取当前API 文件夹 路径：./
        File file=new File("."+File.separator+"API");
        System.out.println(file.getCanonicalPath());
        //4.创建Filter接口---无法直接创建：实现类--实现--接口【创建】
        MyFilter my=new MyFilter();
        //2.获取文件夹下所有的“子项：文件夹下包括所有的文件和文件夹
        File[] subs=file.listFiles(my);
        //3.打印子项下所有名字
        for(int i=0;i<subs.length;i++){//i下标，从0开始
            System.out.println("查找到的："+subs[i]);
        }
    }
//    @Test
//    //单元测试：./指定父级
//    public void test01() throws IOException {
//        //创建File文件类 ： 获取当前API 文件夹 路径：./
//        File file=new File("."+File.separator);
//        System.out.println(file.getCanonicalPath());
//    }
}

 //创建一个实现类，实现Filter接口，完成对象创建
class MyFilter implements FileFilter {
    //accept(File pathname)
     //传入参数：File pathname--获取所有需要过滤文件
     //作用：添加过滤条件，将获取所有需要过滤文件，逐一过滤，【条件；规则--开发者指定】条件满足返回true，输出
     //条件不满足反之
     public boolean accept(File pathname) {
         //添加规则：文件或者文件夹是 S开头--过滤
         //①获取所有文件夹名字
         String name=pathname.getName();
         //②过滤以 S 开头文件夹
         //字符串：startWith() 返回值boolean
         //作用：验证字符串首字符是不是匹配字符,如果匹配：true，反之不匹配
         //③打印过滤出现字符串
         System.out.println("过滤出来的文件夹名字是："+name);
         return name.startsWith("s");
匿名内部类方式*/
/*
        File file=new File("."+File.separator+"API");
        FileFilter FF= pathname -> {
            return pathname.getName().startsWith("s");
        };
        File[] subs=file.listFiles(FF);
        //3.打印子项下所有名字
        for(int i=0;i<subs.length;i++){//i下标，从0开始
            System.out.println("查找到的："+subs[i]);
        }
         //Lambda表达式形式*/
        //打印子项下所有的名字  增强for  for(接收类型 f:){}
        for(File f:new File("."+File.separator+"API").listFiles((pathname) ->{return pathname.getName().startsWith("f");})){
            System.out.println("遍历后进行过滤完成后的结果："+f)
            ;}
    }
 }

